#ifndef SCENETOOL_FLOW_H
#define SCENETOOL_FLOW_H
#include "customgraphicsscene.h"
#include "scenetool.h"
#include <QGraphicsLineItem>

class Flow;

/**
 * @class FlowSceneTool
 * Инструмент для создания связей. Любых.
 * Работа с ним происходит следующим образом:
 * пользователь нажимает лкм на начальной фигуре, затем тянет связь
 * к конечной фигуре (при этом, если связь можно создать, конечная фигура выделяется),
 * и затем отпускает лкм на фигуре. Связь будет создана, если это возможно.
 * В конце этой операции (если она выполнена успешно) инструмент будет автоматически
 * заменен на SelectionSceneTool.
 *
 * Вытягивание узлов происходит во время работы SelectionSceneTool (кто бы мог подумать).
 */
class FlowSceneTool : public SceneTool
{
public:
	FlowSceneTool (CustomGraphicsScene::EditorTool oldtool);
	virtual bool activate (CustomGraphicsScene *scene, SceneTool *prev);
	virtual bool mousePressEvent (QGraphicsSceneMouseEvent *event);
	virtual bool mouseReleaseEvent (QGraphicsSceneMouseEvent *event);
	virtual bool mouseMoveEvent (QGraphicsSceneMouseEvent *event);
	virtual bool mouseDoubleClickEvent (QGraphicsSceneMouseEvent *event);
	Flow *flowExists (Shape *start, Shape *end);
private:
	QGraphicsLineItem *_templine;
	CustomGraphicsScene::EditorTool _oldtool;
};

#endif // SCENETOOL_FLOW_H
